﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web.Management;
using dao.commons;

namespace dao.daos
{
    public class PedidoDao : BaseDao
    {
        public PedidoDao() : base("PEDIDO", "ID_PEDIDO", true)
        {
        }

        public SqlDataReader ObtenerPedidosEnEstadoActivo()
        {
            Conectar();
            try
            {
                Cmd.CommandText =
                    "SELECT PEDIDO.ID_PEDIDO as 'ID_PEDIDO', PROVEEDOR.RAZON_SOCIAL as 'RAZON_SOCIAL', PEDIDO.FECHA as 'FECHA' FROM PEDIDO INNER JOIN PROVEEDOR ON PEDIDO.ID_PROVEEDOR = PROVEEDOR.ID_PROVEEDOR INNER JOIN ESTADO_PEDIDO ON PEDIDO.ID_ESTADO_PEDIDO = ESTADO_PEDIDO.ID_ESTADO_PEDIDO WHERE ESTADO_PEDIDO.ID_ESTADO_PEDIDO = 1";
                SqlDataReader dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return dr;
            }
            catch (Exception e)
            {
                throw new SqlExecutionException("Error al obtener pedidos en estado Activo", e);
            }
        }

        public int Insertar(SqlConnection con, SqlTransaction trans, int idProveedor, DateTime fecha, int idEstado)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "Insert into PEDIDO (ID_PROVEEDOR, FECHA, ID_ESTADO_PEDIDO) values (" + idProveedor + ", '" + fecha + "', " + idEstado + "); select @@identity;";
            int pedidoId;
            try
            {
                pedidoId = Convert.ToInt32(cmd.ExecuteScalar());
            }
            catch (Exception e)
            {
                throw new SqlExecutionException("Error al insertar pedido", e);
            }
            return pedidoId;
        }

        public void InsertarDetallePedido(SqlConnection con, SqlTransaction trans, int idPedido, int idProducto, int cant)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;
            try
            {
                cmd.CommandText = "Insert into DETALLE_PEDIDO (ID_PEDIDO, ID_PRODUCTO, CANTIDAD) values (" + idPedido + ", " +
                                              idProducto + ", " + cant + ")";
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw new SqlExecutionException("Error al insertar detalle de pedido", e);
            }
        }

        public void InsertarDetallePedido(int idPedido, int idProducto, int cant)
        {
            Conectar();
            try
            {
                Cmd.CommandText = "Insert into DETALLE_PEDIDO (ID_PEDIDO, ID_PRODUCTO, CANTIDAD) values (" + idPedido + ", " +
                                              idProducto + ", " + cant + ")";
                Cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw new SqlExecutionException("Error al insertar detalle de pedido", e);
            }
        }
    }
}
